package cup.com.icss.utils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.servlet.ModelAndView;

import com.github.pagehelper.PageInfo;

public class ListPage {
	/**
	 * 从session中获取表格之前显示页面第几页和页面条数，并且发送给页面
	 * @param request
	 * @param prefixName
	 * @param view
	 */
	public static void setPageParamToView(HttpServletRequest request,String prefixName,ModelAndView view){
		Integer pageSize=null,pageNum=null;
		
		String sizeName=prefixName+"Size";
		String pageNumName=prefixName+"PageNum";
		if(request.getSession().getAttribute(sizeName)!=null){
			pageSize=(Integer)request.getSession().getAttribute(sizeName);
		}else{
			pageSize=10;//默认每页显示10条
		}
		if(request.getSession().getAttribute(pageNumName)!=null){
			pageNum=(Integer)request.getSession().getAttribute(pageNumName);
		}else{
			pageNum=1;//默认显示第一页
		}
		
		view.addObject(sizeName,pageSize);
		view.addObject(pageNumName,pageNum);
	}
	
	/**
	 * 将当前显示页面第几页和页面条数存入session
	 * @param request
	 * @param prefixName
	 * @param map
	 * @param view
	 */
	public static void setPageParamToSession(HttpServletRequest request,String prefixName,Map<String, Object> map){
		if(map!=null){
			request.getSession().setAttribute(prefixName+"Size",  map.get("pageSize"));
			request.getSession().setAttribute(prefixName+"Num", map.get("pageNum"));
		}
	}
	/**
	 * 将当前显示页面第几页和页面条数存入map
	 * @param page
	 * @return
	 */
	public static Map<String, Object> setPageParamToMap(PageInfo<? extends Object> page){
		Map<String, Object> map=new HashMap<String, Object>();
		if(page!=null){
			map.put("total", page.getTotal());
			map.put("rows", page.getList());
			map.put("pageNum", new Integer(page.getPageNum()));
			map.put("pageSize", new Integer(page.getPageSize()-2));
		}
		return map;
	}
	
	public static Map<String, Object> setListToMap(List<?> list,int pageSize,int pageNum){
		Map<String, Object> map=new HashMap<String, Object>();
		if(list!=null && list.size()>0){
			int start=0;
			int end=0;
			if(pageSize*(pageNum-1)<list.size()) {
				start=pageSize*(pageNum-1);
				end=pageSize*pageNum>list.size()?list.size():pageSize*pageNum;
			}else {
				if(list.size()%pageSize==0) {
					start=list.size()/pageSize-1;
					end=list.size();
					pageNum=list.size()/pageSize;
				}else {
					start=list.size()/pageSize;
					end=list.size();
					pageNum=list.size()/pageSize+1;
				}
			}
			map.put("total", list.size());
			map.put("rows", list.subList(start, end));
			map.put("pageNum", pageNum);
			map.put("pageSize", pageSize);
		}else {
			map.put("total", 0);
			map.put("rows", list);
			map.put("pageNum", pageNum);
			map.put("pageSize", pageSize);
		}
		return map;
	}
}
